function calculateStatistics(scores, weights, specificScores) {
    const indicatorStats = {};  // 创建一个空对象来存储每个指标的统计数据

    // 遍历所有评分，初始化统计对象
    scores.forEach(score => {
        const indicatorID = score.indicatorID;  // 获取当前评分所属的指标ID
        if (!indicatorStats[indicatorID]) {  // 如果还没有为该指标创建统计条目，则创建一个新的
            indicatorStats[indicatorID] = {
                scores: [],  // 存储属于该指标的所有评分
                total: 0,  // 总分
                average: 0,  // 平均分
                variance: 0,  // 方差
                count: 0,  // 评分数量
                zScore: 0  // Z分数
            };
        }
        indicatorStats[indicatorID].scores.push(score.score);  // 将当前评分添加到相应指标的评分数组中
    });

    // 定义一个内部函数来计算单个指标的统计信息
    function computeStats(data, weight, indicatorID) {
        const count = data.scores.length;  // 评分的数量
        const sum = data.scores.reduce((acc, score) => acc + score, 0);  // 计算总分
        const average = count > 0 ? sum / count : 0;  // 计算平均分
        // 根据所有评分计算标准差
        let variance = 0;
        if (count > 1) {
            variance = data.scores.reduce((acc, score) => acc + Math.pow(score - average, 2), 0) / count; // 方差
        }
        const stdDev = Math.sqrt(variance);  // 标准差

        // 更新统计数据，保留两位小数
        data.total = parseFloat(sum.toFixed(2));
        data.average = parseFloat(average.toFixed(2));
        data.variance = parseFloat(stdDev.toFixed(2));
        data.count = count;


        // 使用特定同学的分数计算Z分数
        // console.log('indicatorID:',indicatorID);
        const specificScore = specificScores[indicatorID]; // 获取特定同学的分数
        // console.log('specificScore:', specificScore);
        if (stdDev > 0 && specificScore !== undefined) {
            data.zScore = parseFloat(((specificScore - average) / stdDev).toFixed(2));
        }
    }

    // 对于每个指标，使用对应的权重调用computeStats函数计算统计信息
    Object.keys(indicatorStats).forEach(indicatorID => {
        const weight = weights[indicatorID] || 1;  // 如果没有提供权重，则默认为1
        computeStats(indicatorStats[indicatorID], weight, indicatorID);
    });

    // 处理多级指标，将子指标的评分合并到父指标
    Object.keys(indicatorStats).forEach(indicatorID => {
        const parts = indicatorID.split('.');  // 按点分割指标ID
        while (parts.length > 1) {  // 只要还有上一级指标
            const parentIndicatorID = parts.slice(0, -1).join('.');  // 构造父指标ID
            if (indicatorStats[parentIndicatorID]) {  // 如果父指标已经存在
                indicatorStats[parentIndicatorID].scores.push(...indicatorStats[indicatorID].scores);  // 合并子指标的评分
            } else {  // 如果父指标不存在，则创建新的条目
                indicatorStats[parentIndicatorID] = {
                    scores: [...indicatorStats[indicatorID].scores],  // 使用子指标的评分初始化
                    zScore: 0
                };
            }
            parts.pop();  // 去掉最后一部分，继续处理更上一级的指标
        }
    });

    // 再次计算所有指标（包括更新后的父指标）的统计信息
    Object.keys(indicatorStats).forEach(indicatorID => {
        const weight = weights[indicatorID] || 1;
        computeStats(indicatorStats[indicatorID], weight);
    });

    return indicatorStats;  // 返回包含所有指标统计信息的对象
}
